#include <iostream>
#include <cstring>
#include <cerrno>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

using namespace std;

#include "name.hpp"

int main()
{
    // 1.创建命名管道文件--mkfifo
    umask(0);
    int ret = mkfifo(fifoname.c_str(), 0666); // 成功返回0， 失败返回-1，并设置错误码
    if (ret == -1)
    {
        cout << errno << " : " << strerror(errno) << endl;
        return -1;
    }
    cout << "creat fifo file sucess" << endl;

    // 2. 让服务端直接开启管道文件
    int fd = open(fifoname.c_str(), O_RDONLY); // 失败返回-1，成功返回新的文件描述符
    if (fd == -1)
    {
        cout << errno << " : " << strerror(errno) << endl;
        return -1;
    }
    cout << "fifo open sucess" << endl;

    // 3.开始通信，读取
    char buffer[NUM];
    while (true)
    {

        int n = read(fd, buffer, sizeof(buffer) - 1);
        if (n > 0)
        {
            buffer[n] = 0; // 添加\0
            cout << "client : " << buffer << endl;
        }
        else if (n == 0)
        {
            // 文件写端关闭
            cout << "client quit me too" << endl;
            break;
        }
        else
        {
            //读取失败
            std::cout << errno << " : " << strerror(errno) << std::endl;
            break;
        }
    }

    // 关闭文件描述符
    close(fd);

    //删除命名管道文件
    unlink(fifoname.c_str());
    return 0;
}